
public class Test {
    public static void main(String[] args) {
        int num = 1;
        if (num <= 10) {
            System.out.println("num 小于等于 10");
            // int num = 2; // 错误：变量 num 已在作用域内定义
        }
        for (int i = 0; i < 5; i++) {
            // int num = 2; // 错误：变量 num 已在作用域内定义
            System.out.println(i);
        }
    }

}

// 在 Java 里，所有带 {} 的“语句块”都是独立作用域，规则统一：
// 一旦进入新的 {}，就开启一个新的块级作用域；在同一方法内，只要外层已经声明了同名局部变量，里层就不能再声明一次
// | 代码块 | 示例 | 能否再声明同名局部变量 |
// | --------------------- | ------------------------------ | ----------- |
// | **if / else** | `if (…) { int x = …; }` | ❌ 与外层同名报错 |
// | **for 循环体** | `for (…) { int x = …; }` | ❌ 与外层同名报错 |
// | **while 循环体** | `while (…) { int x = …; }` | ❌ 与外层同名报错 |
// | **do-while 循环体** | `do { int x = …; } while (…);` | ❌ 与外层同名报错 |
// | **try-catch-finally** | `try { int x = …; }` | ❌ 与外层同名报错 |
// | **switch 分支** | `case 1: { int x = …; }` | ❌ 与外层同名报错 |
// | **裸块**（任意 `{}`） | `{ int x = …; }` | ❌ 与外层同名报错 |
